package com.lcf.app.basic.task;

import cn.hutool.core.date.LocalDateTimeUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * @author ChenFei
 * @date 2021/11/11
 */
@Slf4j
@Component
public class ScheduledTasks {

    //这个周期是以上一个任务开始时间为基准，从上一任务开始执行后5s再次调用：
    @Scheduled(fixedRate = 5000)
    public void rate() throws InterruptedException {
        log.info("任务开始执行 : {}", LocalDateTimeUtil.format(LocalDateTime.now(), "HH:mm:ss"));
        Thread.sleep(5000);
        log.info("任务执行完毕 : {}", LocalDateTimeUtil.format(LocalDateTime.now(), "HH:mm:ss"));
    }

    //这个周期是以上一个调用任务的完成时间为基准，在上一个任务完成之后，5s后再次执行：
    //@Scheduled(fixedDelay = 5000)
    public void delay() throws InterruptedException {
        log.info("任务开始执行 : {}", LocalDateTimeUtil.format(LocalDateTime.now(), "HH:mm:ss"));
        Thread.sleep(5000);
        log.info("任务执行完毕 : {}", LocalDateTimeUtil.format(LocalDateTime.now(), "HH:mm:ss"));
    }

    //指定表达式执行
    @Scheduled(cron = "0/5 * * * * ?")
    public void cron() {
        log.info("任务开始执行 : {}", LocalDateTimeUtil.format(LocalDateTime.now(), "HH:mm:ss"));
    }

}
